package com.hmchat.repository;

import com.hmchat.model.entity.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.mongodb.repository.Update;
import org.springframework.stereotype.Repository;

import java.util.Optional;

/**
 * 用户数据访问层
 * 提供用户相关的数据库操作方法
 */
@Repository
public interface UserRepository extends MongoRepository<User, String> {

    Optional<User> findByUsername(String username);
    
    Optional<User> findByEmail(String email);
    
    Optional<User> findByPhone(String phone);
    
    boolean existsByUsername(String username);
    
    boolean existsByEmail(String email);
    
    boolean existsByPhone(String phone);
    
    // 支持多种登录方式（用户名、邮箱、手机号）
    default Optional<User> findByAccount(String account) {
        Optional<User> user = findByUsername(account);
        if (user.isPresent()) {
            return user;
        }
        
        user = findByEmail(account);
        if (user.isPresent()) {
            return user;
        }
        
        return findByPhone(account);
    }
    
    // 增加失败登录次数
    @Query("{'_id': ?0}")
    @Update("{'$inc': {'failedAttempts': 1}}")
    void incrementFailedAttempts(String userId);
    
    // 重置失败登录次数
    @Query("{'_id': ?0}")
    @Update("{'$set': {'failedAttempts': 0}}")
    void resetFailedAttempts(String userId);
}